
// 地址API 
import {
  getDefaultAddress // 请求默认的收货地址
} from '../../api/addressMangerAPI'

// 订单API
import {submitOrder,alterOrderStatus,payment} from '../../api/orderApi'

// 购物车API
import {removeCartGoods} from '../../api/cartApi'

// 引入vant组件的库的弹窗
import Dialog from '../../miniprogram_npm/@vant/weapp/dialog/dialog';

Page({

  data: {
    orderHeight:wx.getSystemInfoSync().windowHeight - 45, // 订单页面可用高度（减去自定义导航栏高度）
    goodsList:[],  // 订单商品列表
    currentShowGoods:[], // 当前展示商品
    remark:'', // 留言
    showAllGoods:false, // 是否显示查看全部商品按钮
    stretchText:'查看全部商品', // 商品的列表的展开与关闭 按钮上的文字
    showMore:false,  // 显示更多商品列表的标识 
    amount:0 ,  // 订单中商品总件数
    unpaid:0 , // 待支付
    total:0 , // 总价
    discounts:0, // 优惠
    hasAddress:false, // 是否存在默认收货地址
    name:'',  // 收货人名称
    sex:'',  // 收货人性别
    phone:'', // 收货人电话号码
    address:'', //收货人地址
    label:'', // 地址标签
    cart:true, // 是否从购物车跳转该页面的
    disabled:false, // 立即支付按钮的禁用状态
  },

  //当前页面加载时启动
  onLoad:function(option){
    const eventChannel =  this.getOpenerEventChannel()
    const superThis = this // 将可以对data中数据进行访问修改的对象缓存起来
    // 接受购物车页面传递的商品信息
    eventChannel.on('acceptDataFromCartPage',function(data){
      console.log("传递到订单页面的数据----------------------------",data.goodsList);
      let goodsList = data.goodsList
      let tmp = [goodsList[0]]
      if(goodsList.length > 1){
        tmp.push(goodsList[1])
      }
      superThis.setData({
        // 初始化当前订单页面展示的商品，默认只展示两种商品
        currentShowGoods: tmp,
        showAllGoods: goodsList.length > 2 // 显示加载更多商品按钮（商品种类大于2时显示）
      })
      // 初始化当前 订单页面上的所有商品
      superThis.data.goodsList = goodsList
      // 初始化订单中商品的总数量、总价格、待支付的价格
      superThis.initialOederNumber()
    })
    // 监听商品详情页面跳转时传递的数据
    eventChannel.on('acceptDataFromGoodsPage',function(data){
      console.log("商品详情页面跳转的数据",data);
      superThis.setData({
        // 初始化当前订单页面展示的商品
        currentShowGoods: [data],
        showAllGoods: false,
        amount:data.count,
        unpaid: data.currentprice * data.count,
        discounts:(data.lastprice * data.count - data.currentprice * data.count).toFixed(2),
        total: data.lastprice * data.count ,
        cart:false
      })
       // 初始化当前 订单页面上的商品
       superThis.data.goodsList = [data]
    })
  },
  
  onShow:function(){
    // 初始化订单中商品的总数量、总价格、待支付的价格
    // this.initialOederNumber()
    console.log("商品总价为："+this.data.total);
    console.log("商品待支付："+this.data.unpaid);
    // 初始化默认的收货地址
    this.initialDefaultAddress()
  },

  /**
   * 初始化默认的收货地址
   */
  initialDefaultAddress:function(){
    getDefaultAddress().then(data=>{
      // 判断是否存在默认收货地址
      if(data.hasAddress){
        let address = data.address
        this.setData({
          hasAddress:true, 
          name:address.name,
          sex: address.sex ? '女士' : '先生',
          phone:address.phone, 
          address:address.localtion.address + address.localtion.name +' '+ address.houseNum,
          label:address.label
        })
      }else{
        this.setData({
          hasAddress:false
        })
        console.log("当前不存在收货地址！");
      }
    })
  },

  /**
   * 初始化订单中 商品的总件数、总价钱、待支付的价钱
   */
  initialOederNumber:function(){
    let amount = 0  // 商品总件
    let total = 0   // 商品总价 
    let unpaid = 0  // 商品待支付价格
    this.data.goodsList.forEach(item=>{
      amount+=item.count // 计算出商品总件
      total+=item.count * item.lastprice // 计算出订单总价格
      unpaid+=item.count * item.currentprice // 计算出订单待支付价格
    })
    this.setData({
      amount,
      total:total.toFixed(2),
      unpaid:unpaid.toFixed(2),
      discounts:(total-unpaid).toFixed(2)
    })
  },
  
  /**
   * 处理点击显示/收起 商品列表
   */
  handleClickStretch:function(){
    let goodsList = this.data.goodsList
    if(this.data.showMore){
      this.setData({
        showMore:false,
        stretchText:'查看全部商品',
        currentShowGoods:[goodsList[0],goodsList[1]]
      })
    }else{
      this.setData({
        showMore:true,
        stretchText:'收起全部商品',
        currentShowGoods:goodsList
      })
    }
  },

  // ------ 处理点击收货信息事件 -------
  handleClickReceiptInfo:function(){
    // 跳转到收货地址管理页面
    wx.navigateTo({
      url: '/pages/my/addressManger/addressManger?from=order',
    })
  },

  // ------ 处理留言输入框change事件 -------
  handleRemarkChange(e){
    this.setData({
      remark:e.detail
    })
    console.log("输入的留言："+this.data.remark);
  },

  /**
   * 用来处理点击立即支付按钮事件
   */
  paynow(){
    this.setData({disabled:true}) // 禁用立即支付按钮
    // 判断是否选择收货地址
    if(this.data.hasAddress){
      let data = this.data
      console.log("提交订单的数据:",data);
      new Promise((reslove)=>{
        submitOrder({ // 提交订单
          totalmoney: data.total, // 总价
          sale: data.discounts, // 优惠
          resultmoney: data.unpaid, // 待支付价格
          createtime: new Date().getTime(), // 订单创建时间
          leaveword: data.remark, // 留言
          name: data.name, // 收货人名称
          phone: data.phone, //收货人电话
          label: data.label,  // 地址标签
          address: data.address,  //收货人地址
          ordergoods: data.goodsList  // 订单商品列表
        }).then(data=>{
          console.log("订单是否创建成功：",data);
          reslove(data)
        })
      }).then((result)=>{
        // 判断订单是否创建成功
        if(result.succeed){
          // 获取订单id
          let orderId = result.orderId
          // 如果cart为true，表示订单页面的数据来源于购物车，需要删除购物车中已选中的商品
          if(data.cart){
            let goodsList = []
            // 获取订单中所有商品的id
            data.goodsList.forEach(item=> goodsList.push({goods_id:item.id,specificationid:item.specid}))
            // 向服务端发送请求，删除购物车中已被生成进订单的商品
            removeCartGoods(goodsList)
          }
          Dialog.confirm({
             title:"支付",
             message:"本次支付金额为："+this.data.unpaid+"元",
             context:this,
             zIndex:9000,
             confirmButtonText:'确认支付'
           }).then(()=>{
             // 调用封装后的订单支付接口
             getApp().orderPayment("商水超市-精品商品",parseInt(this.data.unpaid*100)).then(res=>{
               // 初始化购物车右上角tabbar徽标数量
               getApp().initialCartTabBarBadge()
               // 返回上一页
               wx.navigateBack({ delta: 1})
               switch(res.errMsg){
                 case "requestPayment:fail cancel": //取消支付
                   setTimeout(()=>{
                     wx.showToast({
                       title: '取消支付，可在订单中心继续完成支付',
                       icon: 'none',
                       duration:3500
                     })
                   },700)
                   break
                 case "requestPayment:ok": // 支付成功
                  // 支付已经成功，向服务端请求修改订单状态
                  alterOrderStatus(orderId,"waitReceive")
                   setTimeout(()=>{
                     wx.showToast({
                       title: '支付成功',
                       icon: 'success',
                       duration: 2000
                     })
                   },800)
                   break  
               }
             }).catch(err=>{
                 wx.showToast({
                   title: '系统出错 支付失败，请稍后重试！',
                   icon: 'none',
                   duration: 2000
                 })
             })
           }).catch(()=>{
             // 初始化购物车右上角tabbar徽标数量
             getApp().initialCartTabBarBadge()
             // 返回上一页
             wx.navigateBack({
               delta: 1
             })
           })
        }else{
          wx.showToast({
            title: '订单中商品库存不足！',
            icon: 'none',
            duration: 2500
          })
          setTimeout(function(){
            // 返回上一页
            wx.navigateBack({delta: 1 })
          },2000)
        }
      })
    }else{
      Dialog.alert({
        title: '请选择收货地址',
        confirmButtonText:'知道了',
        context:this
      }).then(()=>{
        this.setData({disabled:false}) // 启用立即支付按钮
      })
    }
    
  },
  /**
   * 进入订单批注页面
   */
  editOrderPostil(){
      console.log("进入订单批注页面");
      let t = this
      wx.navigateTo({
        url: '/pages/submit-order/orderPostil/orderPostil',
        success:(res)=>{
            // 接收关闭的上一个页面传递的数据，也就是留言内容 
            res.eventChannel.on("myEvent",(content)=>{
                console.log("填写的备注:",content);
                t.setData({
                  remark:content.data
                })
            })
            // 将留言内容传递到要打开的页面，也就是修改留言内容的页面
            res.eventChannel.emit("acceptDataFromOrder",{remark:t.data.remark})
        }
      })
  }

})